package lyl.sort;

//冒泡 ，插入， 选择
public class SortEx {
    //冒泡排序
    public void bubbleSort(int arr[]){
        int length = arr.length;
        for (int i = 0 ; i < length ; i++){
            for (int j = 1 ; j < length - i ; j++){
                if(arr[j-1] > arr[j]){
                    int temp = arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j] = temp;
                }

            }
        }
    }

    //选择排序
    public void selectSort(int arr[]){

        for (int i = 0; i < arr.length; i++) {
            int pos = i;
            for (int j = i + 1; j < arr.length; j++){
                if(arr[pos]>arr[j]){
                    pos = j;
                }
            }
            if(i != pos){
                int temp = arr[i];
                arr[i] = arr[pos];
                arr[pos] = temp;
            }
        }
    }

    //插入排序
    public void insertSort(int[] arr){
        for (int i = 1 ; i < arr.length ; i++){
            //选择从第二个元素开始插
            int insertNode = arr[i];
            //比较从前面第一个数开始，第一个比插入结点小的数，那么那个结点的后一个位置就是插入点
            int j = i - 1;
            while (j >=0&&insertNode<arr[j]){//只要插入结点比当前结点小，就让当前结点后移，并且继续往前找，如果找不到那就是第一位
                arr[j + 1] = arr[j];
                j--;
            }
            //那么j的后一位就是插入点
            arr[j + 1] = insertNode;
        }
    }
}
